package io.github.hadyang.leetcode.tencent;

import java.util.Arrays;
import org.junit.Test;

/**
 * 合并两个有序数组
 *
 * <p>给定两个有序整数数组 nums1 和 nums2，将 nums2 合并到 nums1 中，使得 num1 成为一个有序数组。
 *
 * <p>说明:
 *
 * <p>初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
 *
 * <p>你可以假设 nums1 有足够的空间（空间大小大于或等于 m + n）来保存 nums2 中的元素。
 *
 * <p>示例:
 *
 * <p>输入: nums1 = [1,2,3,0,0,0], m = 3
 *
 * <p>nums2 = [2,5,6], n = 3
 *
 * <p>输出: [1,2,2,3,5,6]
 */
public class Array914 {

  @Test
  public void test() {
    int[] ints1 = {1, 2, 3, 0, 0, 0};
    int[] ints2 = {2, 5, 6};

    merge(ints1, 3, ints2, 3);

    System.out.println(Arrays.toString(ints1));
  }

  public void merge(int[] nums1, int m, int[] nums2, int n) {
    int[] ints = Arrays.copyOf(nums1, m);

    int i = 0, j = 0;
    int k = 0;
    while (i < ints.length || j < nums2.length) {
      if (i >= ints.length) {
        nums1[k++] = nums2[j++];
        continue;
      }

      if (j >= nums2.length) {
        nums1[k++] = ints[i++];
        continue;
      }

      if (ints[i] > nums2[j]) {
        nums1[k++] = nums2[j++];
      } else {
        nums1[k++] = ints[i++];
      }
    }
  }
}
